package com.itheima.d1_stream;

import java.util.*;

//目标：掌握Stream流常见终结方法的使用
public class Demo4 {
    public static void main(String[] args) {
        List<Student> stus = new ArrayList<>();
        Student s1 = new Student("蜘蛛精", 26, 172.5);
        Student s2 = new Student("蜘蛛精", 26, 172.5);
        Student s3 = new Student("紫霞", 23, 167.6);
        Student s4 = new Student("白晶晶", 25, 169.0);
        Student s5 = new Student("牛魔王", 35, 183.3);
        Student s6 = new Student("牛夫人", 34, 168.5);
        Collections.addAll(stus, s1, s2, s3, s4, s5, s6);

        // 需求1：请计算出身高超过168的学生有几人。
        //1.1 获取流
        long count = stus.stream()
                //1.2 筛选功能：filter
                .filter(student -> student.getHeight() > 168)
                //1.3 统计筛选后流中数据的个数，用终结方法：count
                .count();
        System.out.println("个数：" + count);

        // 需求2：请找出身高最高的学生对象，并输出。
        //2.1 获取流
        Optional<Student> max = stus.stream()
                // 2.2 获取最大值，并且大小关系是根据身高比较来的，调用终结方法：max
                .max((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()));
        Student maxStu = max.get();
        System.out.println("身高最高的学生是：" + maxStu);

        // 需求3：请找出身高最矮的学生对象，并输出
        //3.1 获取流
        Student minStu = stus.stream()
                //3.2 获取身高最矮的学生对象，获取最小值，使用终结方法：min
                .min((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()))
                //3.3 返回的是Optional对象，它有get方法可以拿到学生对象
                .get();
        System.out.println("身高最矮的学生是：" + minStu);
    }
}

